package cn.kmsoft.crypto;

import java.security.MessageDigest;
import java.util.Formatter;

/**
 * 不可逆加密MD5
 *
 * 加密算法整体上可以分为不可逆加密以及可逆加密.
 * 可逆加密又分为: 对称加密和非对称加密。
 * 不可逆加密的算法的加密是不可逆的，密文无法被还原成原文。
 *
 * 散列算法，就是一种不可逆算法。散列算法中，明文通过散列算法生成散列值，散列值是长度固定的数据，和明文长度无关。
 */
public class MD5 {
    private static final String MD5_ALGORITHM = "MD5";
    public static String encrypt(String data) throws Exception {
        // 获取MD5算法实例
        MessageDigest messageDigest = MessageDigest.getInstance(MD5_ALGORITHM);
        // 计算散列值
        byte[] digest = messageDigest.digest(data.getBytes());
        Formatter formatter = new Formatter();
        // 补齐前导0，并格式化
        for (byte b : digest) {
            formatter.format("%02x", b);
        }
        return formatter.toString();
    }

    public static void main(String[] args) throws Exception {
        String data = "Hello World";
        String encryptedData = encrypt(data);
        System.out.println("加密后的数据：" + encryptedData);
    }

}
